package com.gouwudai.gobbs.dao;

import java.util.Date;
import java.util.List;

import com.gouwudai.gobbs.common.IPageList;
import com.gouwudai.gobbs.pojo.TbbsTopic;
import com.gouwudai.gobbs.pojo.TbbsTopicContent;
import com.gouwudai.gobbs.pojo.TbbsTopicRe;
import com.litt.core.common.PageParam;
import com.litt.core.exception.DBException;

/**
 * <pre>
 *  Title:TODO
 *  Description: TODO  
 * </pre>
 * 
 * @author <a href="mailto:littcai@hotmail.com">空心大白菜</a>
 * @date 2007-3-29
 * @version 1.0
 * <pre>
 * 修改记录
 *    修改后版本:     修改人：  修改日期:     修改内容: 
 * </pre>
 */
public interface ITopicDAO {

	/**
	 * 保存主题：先保存主题、再保存回复、再保存内容,最后更新主题的topicReId
	 * @param tbbsTopic
	 * @param tbbsTopicRe
	 * @param tbbsTopicContent
	 * @return
	 * @throws DBException
	 */
	public Integer saveTopic(TbbsTopic tbbsTopic, TbbsTopicRe tbbsTopicRe,
			TbbsTopicContent tbbsTopicContent);

	/**
	 * 回复主题：先保存回复、再保存内容,最后更新主题的最后回复人
	 * @param tbbsTopic
	 * @param tbbsTopicRe
	 * @param tbbsTopicContent
	 * @return
	 * @throws DBException
	 */
	public void doReTopic(TbbsTopic tbbsTopic, TbbsTopicRe tbbsTopicRe,
			TbbsTopicContent tbbsTopicContent);

	/**
	 * 编辑主题
	 * @param tbbsTopic
	 * @param tbbsTopicRe
	 * @param tbbsTopicContent
	 * @throws DBException
	 */
	public void doEditTopic(TbbsTopic tbbsTopic, TbbsTopicRe tbbsTopicRe,
			TbbsTopicContent tbbsTopicContent);

	public TbbsTopic load(Integer id);

	/**
	 * 移动帖子
	 * @param topicId 主题ID
	 * @param classId 目标版面ID
	 * @param classParentId 目标版面父ID
	 * @param moveUser 操作人员
	 * @param moveTime 移动时间
	 * @param savelink 判断送是否在原来的版面保留链接
	 */
	public void doMoveTopic(Integer topicId, Integer classId,
			Integer classParentId, String moveUser, boolean savelink);

	/**
	 * 主题表的浏览次数累加
	 * @param topicId
	 * @throws DBException
	 */
	public void updateTopicViewCount(Integer topicId);

	/**
	 * 主题表的回复次数累加
	 * @param topicId
	 * @param lastReUser
	 * @param lastReTime
	 * @throws DBException
	 */
	public void updateTopicReCount(Integer topicId, String lastReUser,
			Date lastReTime);

	/**
	 * 审核主题
	 * @param topicId
	 * @throws DBException
	 */
	public void doCheckTopic(Integer topicId);

	/**
	 * 修改主题类型
	 * @param topicId
	 * @throws DBException
	 */
	public void updateTopicPro(Integer topicPro, Integer topicId);
    
    /**
     * 修改主题置顶.
     * 
     * @param topicOnTop 主题置顶
     * @param topicId 主题ID
     */
    public void updateTopicOnTop(Integer topicOnTop,Integer topicId);    

	/**
	 * 逻辑删除主题
	 * @param topicId
	 * @throws DBException
	 */
	public void deleteLogic(String topicIds);

	/**
	 * 还原已删除主题
	 * @param topicId
	 * @throws DBException
	 */
	public void doResume(String topicIds);

	/**
	 * 物理删除主题
	 * @param topicId
	 * @throws DBException
	 */
	public void delete(Integer topicId);

	/**
	 * 查询当前版面的主题信息
	 * @param classId
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 * @throws DBException
	 */
	public List listByClass(PageParam pageParam);

	/**
	 * 查询当前版面的主题信息数量（供分页）
	 * @param classId
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 * @throws DBException
	 */
	public int listCountByClass(PageParam pageParam);

	/*************************************************************************/

	/**
	 * 根据主题属性查询
	 * @param topicPro
	 * @param size
	 * @return
	 */
	public List listByPro(Integer topicPro,int pageSize);
    
	public IPageList listPage(PageParam pageParam);
    
    /**
     * 后台文章管理表格查询
     * @param pageParam //查询类型:0-全部，1-已认证主题，2-未认证主题，3-回收站主题
     * @return IPageList
     */
    public IPageList listManagePage(PageParam pageParam);
    
    /**
     * 回收站查询
     * @param pageParam
     * @return IPageList
     */
    public IPageList listRecycle(PageParam pageParam);

	/**
	 * 查询最新的10个主题
	 * @return
	 * @throws DBException
	 */
	public List listTop10();

	/**
	 * 查询我发表的主题或回复
	 * @param userId 用户ID
	 * @param type -  0.我的主题,1.我的回复
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 * @throws DBException
	 */
	public List listMyTopic(int userId, int type, int pageIndex, int pageSize);

	/**
	 * 查询我发表的主题或回复
	 * @param userId 用户ID
	 * @param type - 0.我的主题,1.我的回复
	 * @return
	 * @throws DBException
	 */
	public int listCountMyTopic(int userId, int type);

}